package com.example.huadu_server.admin.service;

import com.example.huadu_server.admin.dto.UpdateInfoDTO;
import com.example.huadu_server.admin.dto.UserInfoDTO;
import com.example.huadu_server.admin.entity.Admin;
import com.example.huadu_server.config.Response;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;
import java.util.Map;

public interface AdminService {
    //修改密码
    Response<String> modifyPassword(int userId, String oldPassword, String newPassword, String confirmPassword);

    //忘记密码
    Response<String> sendForgetPasswordCode(String email);

    Response<String> resetPassword(String email, String code, String newPassword, String confirmPassword);

    //查看个人信息
    Response<Admin> getUserInfoById(int userId);

    // 修改用户信息
    Response<String> updateUserInfo(int userId, UpdateInfoDTO updateInfoDTO);

    //用户邮箱验证码
    Response<String> sendUpdateEmailCode(String email);

    // 修改用户邮箱
    Response<String> updateUserEmail(int userId, UserInfoDTO userInfoDTO);

    // 上传用户头像
    Response<String> uploadUserLogo(MultipartFile file, int userId);

    /**
     * 获取所有用户
     *
     * @param pageNo   当前页码
     * @param pageSize 每页大小
     * @return 用户列表
     */
    Response<Map<String, Object>> getAllUsers(int pageNo, int pageSize);

    /**
     * 获取所有房东
     * @param pageNo 当前页码
     * @param pageSize 每页大小
     * @return 房东列表
     */
    Response<Map<String, Object>> getAllLandlords(int pageNo, int pageSize);

    /**
     * 禁用用户
     *
     * @param userId   用户ID
     * @param password 管理员密码
     * @param remarks  禁用理由（邮件通知内容）
     * @return 操作结果
     */
    Response<String> disableUser(int userId, String password, String remarks);

    /**
     * 恢复用户
     *
     * @param userId   用户ID
     * @param password 管理员密码
     * @return 操作结果
     */
    Response<String> enableUser(int userId, String password);

    /**
     * 禁用房东
     *
     * @param landlordId 房东ID
     * @param password   管理员密码
     * @param remarks    禁用理由（邮件通知内容）
     * @return 操作结果
     */
    Response<String> disableLandlord(int landlordId, String password, String remarks);

    /**
     * 恢复房东
     *
     * @param landlordId 房东ID
     * @param password   管理员密码
     * @return 操作结果
     */
    Response<String> enableLandlord(int landlordId, String password);

    /**
     * 获取总览统计数据
     * @return 总览统计数据（包含总租客数、总房东数、房源总量、预约记录数量、在线聊天记录数量）
     */
    Response<Map<String, Object>> getOverviewStats();

    /**
     * 获取趋势统计数据
     *
     * @param type        统计数据类型，如 "house"、"appointment"、"message"
     * @param startDate   统计起始时间（格式 "YYYY-MM-DD"）
     * @param endDate     统计结束时间（格式 "YYYY-MM-DD"）
     * @param granularity 统计粒度（"day"、"month"、"year"）
     * @return 总结趋势统计数据（包含各时间段的数据量）
     */
    Response<Map<String, Object>> getTrendStats(String type, String startDate, String endDate, String granularity);

    /**
     * 获取用户行为统计数据，包括总浏览数、总收藏数、总预约数及转换率
     * @return 用户行为数据统计
     */
    Response<Map<String, Object>> getUserBehaviorStats(String metric, String startDate, String endDate, String granularity);

    /**
     * 获取房东运营情况统计数据
     * @return 包含各房东的运营数据（房源发布数、预约记录数等）
     */
    Response<List<Map<String, Object>>> getLandlordPerformanceStats();

    /**
     * 获取房源在不同地理区域的分布情况
     * @param type 统计类型，"business" 表示按商圈统计，"subway" 表示按地铁站统计
     * @return 分布数据列表，每个记录包含区域名称及该区域房源数量
     */
    Response<List<Map<String, Object>>> getGeoDistribution(String type);
}
